package controlador.taller;

import java.util.LinkedList;

import javax.swing.JOptionPane;

import controlador.StreetRoadApplication;

import modelo.auto.*;
import modelo.escenario.Taller;
import modelo.excepciones.ComponentAlreadyExistsException;
import modelo.excepciones.InvalidMaxMarchaCajaException;
import modelo.excepciones.InvalidMontoAbonadoException;
import modelo.excepciones.UnableToAddElementToListException;
import modelo.excepciones.UnableToAdjustComponentException;
import modelo.excepciones.UnableToBuyComponentException;
import modelo.excepciones.UnableToRemoveElementFromListException;
import modelo.juego.Usuario;

public class ControladorTaller{
	private Taller taller;
	
	private LinkedList<ElementoTaller> listaTaller;
	
	public ControladorTaller(Taller taller){
		this.taller = taller;
		listaTaller = taller.getListaComponentes();
	}
	

	public void comprarComponente(int indice){
		ElementoTaller elemento= listaTaller.get(indice);
		try {
			taller.comprarComponente(StreetRoadApplication.getInstancia().getUsuarioActual(), elemento);
		} 
		
		catch (UnableToBuyComponentException e) {
			//System.out.println("No tiene suficiente dinero");
			JOptionPane.showMessageDialog (null,"No tiene suficiente dinero."+"\n"+ "Gane una carrera para poder comprar el componente que desea.","Error",JOptionPane.WARNING_MESSAGE );		
			} 
		
		catch (UnableToAddElementToListException e) {
			System.err.println("No se puede agregar a la lista");
		} 
		
		catch (InvalidMaxMarchaCajaException e) {
			System.err.println("InvalidMaxMarchaCajaException");
		} 
		
		catch (ComponentAlreadyExistsException e) {
			//System.out.println("Ya existe componente");
			JOptionPane.showMessageDialog (null,"Intenta comprar un  componente que ya tiene","Error",JOptionPane.ERROR_MESSAGE );
		}
	}
	
	
	
	public void ajustarComponente(int indice){
		//double costo = 0;
		Componente componente = new Componente();
		componente = (Componente) listaTaller.get(indice);
		
		
		//System.out.println("Vida util: "+componente.getVidaUtil());
		
		if (componente.getVidaUtil() >= 100){
			JOptionPane.showMessageDialog (null,"El componente "+listaTaller.get(indice).getTipo()+" no necesita ser ajustado","Error",JOptionPane.ERROR_MESSAGE );
		}
		else{
			//costo = (100 - componente.getVidaUtil());
			//componente.setVidaUtil(100);
			
			try {
				taller.ajustarComponente(StreetRoadApplication.getInstancia().getUsuarioActual(), componente, StreetRoadApplication.getInstancia().getUsuarioActual().getDinero());
				//StreetRoadApplication.getInstancia().getUsuarioActual().getAuto().removerComponente(componente);
				//StreetRoadApplication.getInstancia().getUsuarioActual().getAuto().agregarComponente(componente);
			}
			catch (UnableToAdjustComponentException e) {
				//System.err.println("No se puede ajustar el componente");
				JOptionPane.showMessageDialog (null,"No se puede ajustar el componente "+listaTaller.get(indice).getTipo(),"Error",JOptionPane.ERROR_MESSAGE );
			} 
			catch (InvalidMontoAbonadoException e) {
				System.err.println("El monto abonado es invalido");
			} 
		}
	}		
}
	


